package com.itheima.lambda;

public class Demo1 {

    public static void main(String[] args) {

        //函数式编程 
        //Lambda表达式（表示函数）：用于替代某些匿名内部类对象，从而让程序更简洁
        //格式：(被重写方法的形参列表)->{被重写方法的方法体代码}
        //Lambda表达式只能替代函数式接口（有且仅有一个抽象方法的接口）的匿名内部类

        Animal a = new Animal() {
            @Override
            public void cry() {
                System.out.println("猫喵喵叫~");
            }
        };
        a.cry();

        //错误用法
        /*Animal a = ()->{
            System.out.println("猫喵喵叫~");
        };*/

        /*Swim s = new Swim() {
            @Override
            public void swim() {
                System.out.println("狗在游泳~");
            }
        };*/
        Swim s = ()->{
            System.out.println("狗在游泳~");
        };
        s.swim();
    }
}

abstract class Animal {

    public abstract void cry();
}

//函数式接口
@FunctionalInterface    //函数式接口注解：用于约束当前接口必须是函数式接口
interface Swim {
    void swim();
}